using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Profile;
using ClickSocial.Framework;
using System.IO;

namespace ClickSocial.Admin.controles
{
    public partial class EditUser : BaseUser
    {
        public string Usuario = string.Empty;
        public event EventHandler UserEdited;

        protected override void ddlRoles_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.ddlRoles_SelectedIndexChanged(sender, e);
        }

        protected override void btnGuardar_Click(object sender, EventArgs e)
        {
            base.btnGuardar_Click(sender, e);

            try
            {
                //Guardar usuario
                DataSourceControls.UserDataSource.Update(UserName.Text, Email.Text, chkIsApproved.Checked, chkIsLocked.Checked);
                //Guardar Perfil
                PerfilComun perfil = (PerfilComun)ProfileBase.Create(UserName.Text);
                perfil.Nombre = txtNombre.Text;
                perfil.Apellido = txtApellido.Text;
                perfil.Telefono = txtTelefono.Text;
                perfil.Celular = txtCelular.Text;
                perfil.Direccion = txtDireccion.Text;
                perfil.Ciudad = txtCiudad.Text;
                perfil.Provincia = txtPcia.Text;
                perfil.Pais = txtPais.Text;

                if (ddlRoles.SelectedValue == "Fotografo")
                {
                    perfil.UsaPrecio = chkPrecio.Checked;

                    long res = 0;
                    if (long.TryParse(txtEspacio.Text, out res))
                    {
                        res = res * 1024 * 1024;
                    }
                    else
                    {
                        res = 50 * 1024 * 1024;
                    }

                    perfil.Espacio = res;                    
                }
                perfil.Save();

                //Guardar rol
                if (!Roles.IsUserInRole(UserName.Text, ddlRoles.SelectedValue))
                {
                    if (Roles.GetRolesForUser(UserName.Text).Length>0)
                        Roles.RemoveUserFromRoles(UserName.Text, Roles.GetRolesForUser(UserName.Text));
                    
                    Roles.AddUserToRole(UserName.Text, ddlRoles.SelectedValue);
                }
                //ejecutar evento
                UserEdited(sender, e);

            }
            catch (Exception ex)
            {
                ErrorMessage.Text = ex.Message;
            }
        }

        public void Cargar()
        {           
            if (Usuario != string.Empty)
            {
                MembershipUser u = Membership.GetUser(Usuario);

                //Cargar datos
                UserName.Text = u.UserName;
                UserName.ReadOnly = true;
                Email.Text = u.Email;

                string[] roles = Roles.GetRolesForUser(u.UserName);
                if (roles.Length > 0)
                {
                    ListItem item = ddlRoles.Items.FindByValue(roles[0]);
                    if (item != null) ddlRoles.SelectedIndex = ddlRoles.Items.IndexOf(item);
                }
                chkIsApproved.Checked = u.IsApproved;
                chkIsLocked.Checked = u.IsLockedOut;
                ddlRoles.Enabled = false;

                PerfilComun perfil = (PerfilComun)ProfileBase.Create(u.UserName);
                chkPrecio.Checked = perfil.UsaPrecio;
                long espacio = perfil.Espacio;

                txtEspacio.Text = Convert.ToString(espacio / 1024 / 1024);
                txtNombre.Text = perfil.Nombre;
                txtApellido.Text = perfil.Apellido;
                txtTelefono.Text = perfil.Telefono;
                txtCelular.Text = perfil.Celular;
                txtDireccion.Text = perfil.Direccion;
                txtCiudad.Text = perfil.Ciudad;
                txtPcia.Text = perfil.Provincia;
                txtPais.Text = perfil.Pais;

                if (Context.User.IsInRole("Host"))
                {
                    lblEspacio.Visible = ddlRoles.SelectedValue.Equals("Fotografo");
                    chkPrecio.Visible = ddlRoles.SelectedValue.Equals("Fotografo");
                    txtEspacio.Visible = ddlRoles.SelectedValue.Equals("Fotografo");
                    lblUnidad.Visible = ddlRoles.SelectedValue.Equals("Fotografo");
                    rfvEspacio.Visible = ddlRoles.SelectedValue.Equals("Fotografo");
                    RangeValidatorEspacio.Visible = ddlRoles.SelectedValue.Equals("Fotografo");
                    lblEspacio2.Visible = ddlRoles.SelectedValue.Equals("Fotografo");
                    lblEspacioUsado.Visible = ddlRoles.SelectedValue.Equals("Fotografo");

                    if (Roles.IsUserInRole(u.UserName, Global.RolesApp.Fotografo))
                    {

                        long space_current = FileManager1.CalculateDirectorySize(new DirectoryInfo(string.Format("{0}\\{1}", Application["BaseDir"], u.UserName)), true);

                        if (space_current > (1024 * 1024))
                            lblEspacioUsado.Text = string.Format("{0:F}Mb de [{1}Mb]", (((float)space_current) / (1024 * 1024)), (perfil.Espacio / 1024 / 1024));
                        else
                            lblEspacioUsado.Text = string.Format("{0}Kb de [{1}Mb]", (space_current / 1024), (perfil.Espacio / 1024 / 1024));
                    }
                }

                RegularExpressionValidator2.Visible = false;

                chkIsLocked.Visible = true;
                chkIsApproved.Visible = true;

                Password.Visible = false;
                ConfirmPassword.Visible = false;
                Question.Visible = false;
                Answer.Visible = false;

                PasswordLabel.Visible = false;
                ConfirmPasswordLabel.Visible = false;
                QuestionLabel.Visible = false;
                AnswerLabel.Visible = false;

                PasswordRequired.Visible = false;
                ConfirmPasswordRequired.Visible = false;
                QuestionRequired.Visible = false;
                AnswerRequired.Visible = false;


            }

        }

    }
}